package administracion;

import java.util.ArrayList;
import java.util.List;

import dao.AdministracionDAO;
import dao.ProveedorDAO;
import dto.Proveedor.DTO_FacturaProveedor;
import dto.Proveedor.DTO_PrecioCarrier;
import dto.Proveedor.DTO_Proveedor;
import dto.Proveedor.DTO_Seguro;
import dto.Proveedor.DTO_ServicioSeguridad;
import entity.Administracion.Entity_Destino;
import entity.Proveedor.Entity_FacturaProveedor;
import entity.Proveedor.Entity_PrecioCarrier;
import entity.Proveedor.Entity_Proveedor;
import entity.Proveedor.Entity_Seguro;
import entity.Proveedor.Entity_ServicioSeguridad;


public class Gestor_Proveedor {
	private static Gestor_Proveedor instancia;
	
	private Gestor_Proveedor(){
		
	}
	
	public static Gestor_Proveedor getInstancia(){
		if(instancia == null){
			instancia = new Gestor_Proveedor();
		} 
		return instancia;
	}

	
	public void altaProveedor(DTO_Proveedor proveedor) {
		Entity_Proveedor p = new Entity_Proveedor();
		p.setActivo(proveedor.getActivo());
		p.setRazonSocial(proveedor.getRazonSocial());
		p.setCuit(proveedor.getCuit());
		p.setCategoria(proveedor.getCategoria());
		p.setDireccion(proveedor.getDireccion());
		p.setCodigoPostal(proveedor.getCodigoPostal());
		p.setLocalidad(proveedor.getLocalidad());
		p.setProvincia(proveedor.getProvincia());
		p.setPais(proveedor.getPais());
		p.setEmail(proveedor.getEmail());
		p.setTelefono(proveedor.getTelefono());
		p.setTipo(proveedor.getTipo());
		if(p.getTipo().equals("T")){
			p.setEspecialidad(proveedor.getEspecialidad());
			p.setTallerOficial(proveedor.getTallerOficial());
		}
		p.setMetodoPago(proveedor.getMetodoPago());

		ProveedorDAO.getInstancia().altaProveedor(p);
		
	}
	public void modificarProveedor(DTO_Proveedor proveedor){
		Entity_Proveedor p = new Entity_Proveedor();
		p.setId(proveedor.getId());
		p.setActivo(proveedor.getActivo());
		p.setRazonSocial(proveedor.getRazonSocial());
		p.setCuit(proveedor.getCuit());
		p.setCategoria(proveedor.getCategoria());
		p.setDireccion(proveedor.getDireccion());
		p.setCodigoPostal(proveedor.getCodigoPostal());
		p.setLocalidad(proveedor.getLocalidad());
		p.setProvincia(proveedor.getProvincia());
		p.setPais(proveedor.getPais());
		p.setEmail(proveedor.getEmail());
		p.setTelefono(proveedor.getTelefono());
		p.setTipo(proveedor.getTipo());
		if(p.getTipo().equals("T")){
			p.setEspecialidad(proveedor.getEspecialidad());
			p.setTallerOficial(proveedor.getTallerOficial());
		}
		p.setMetodoPago(proveedor.getMetodoPago());

		ProveedorDAO.getInstancia().modificarProveedor(p);
	}

	public void bajaProveedor(Integer id) {
		Entity_Proveedor p = ProveedorDAO.getInstancia().getProveedor(id);
		if (p != null){
			ProveedorDAO.getInstancia().bajaProveedor(p);
		}
	}

	public DTO_Proveedor buscarProveedor(String cuit) {
		return ProveedorDAO.getInstancia().buscarProveedor(cuit).toDTO();
	}

	public void altaFacturaProveedor(DTO_FacturaProveedor factura) {
		Entity_FacturaProveedor f = new Entity_FacturaProveedor();
		Entity_Proveedor p = ProveedorDAO.getInstancia().getProveedor(factura.getIdProveedor());
		f.setProveedor(p);
		f.setNumero(factura.getNumero());
		f.setFecha(factura.getFecha());
		f.setVencimiento(factura.getVencimiento());
		f.setMontoTotal(factura.getMontoTotal());
		f.setMontoPendiente(factura.getMontoPendiente());

		ProveedorDAO.getInstancia().AltaFacturaProveedor(f);	
	}

	public void modificarFacturaProveedor(DTO_FacturaProveedor factura){
		Entity_FacturaProveedor f = new Entity_FacturaProveedor();
		Entity_Proveedor p = ProveedorDAO.getInstancia().getProveedor(factura.getIdProveedor());
		f.setId(factura.getId());
		f.setProveedor(p);
		f.setNumero(factura.getNumero());
		f.setFecha(factura.getFecha());
		f.setVencimiento(factura.getVencimiento());
		f.setMontoTotal(factura.getMontoTotal());
		f.setMontoPendiente(factura.getMontoPendiente());

		ProveedorDAO.getInstancia().modificarFacturaProveedor(f);	
	}

	public DTO_FacturaProveedor buscarFacturaProveedor(Integer idFactura) {
		return ProveedorDAO.getInstancia().getFacturaProveedor(idFactura).toDTO();
	}
	
	public void altaServicioSeguridad(DTO_ServicioSeguridad servicioSeguridad){
		Entity_ServicioSeguridad ss = new Entity_ServicioSeguridad();
		Entity_Proveedor p = ProveedorDAO.getInstancia().getProveedor(servicioSeguridad.getIdProveedor());
		ss.setDescripcion(servicioSeguridad.getDescripcion());
		ss.setTarifa(servicioSeguridad.getTarifa());
		ss.setProveedor(p);
		
		ProveedorDAO.getInstancia().altaServicioSeguridad(ss);	
	}

	public void modificarServicioSeguridad(DTO_ServicioSeguridad servicioSeguridad) {
		Entity_ServicioSeguridad ss = new Entity_ServicioSeguridad();
		Entity_Proveedor p = ProveedorDAO.getInstancia().getProveedor(servicioSeguridad.getIdProveedor());
		ss.setId(servicioSeguridad.getId());
		ss.setDescripcion(servicioSeguridad.getDescripcion());
		ss.setTarifa(servicioSeguridad.getTarifa());
		ss.setProveedor(p);
		
		ProveedorDAO.getInstancia().modificarServicioSeguridad(ss);	
	}

	public void bajaServicioSeguridad(Integer idServicioSeguridad){
		Entity_ServicioSeguridad s = ProveedorDAO.getInstancia().getServicioSeguridad(idServicioSeguridad);
		if (s != null){
			ProveedorDAO.getInstancia().bajaServicioSeguridad(s);
		}
	}

	public DTO_ServicioSeguridad buscarServicioSeguridad(Integer idServicioSeguridad) {
		return ProveedorDAO.getInstancia().getServicioSeguridad(idServicioSeguridad).toDTO();
	}
	
	public void altaSeguro(DTO_Seguro seguro) {
		Entity_Seguro s = new Entity_Seguro();
		Entity_Proveedor p = ProveedorDAO.getInstancia().getProveedor(seguro.getIdProveedor());
		s.setDescripcion(seguro.getDescripcion());
		s.setTipoSeguro(seguro.getTipoSeguro());
		s.setTarifa(seguro.getTarifa());
		s.setProveedor(p);
		
		ProveedorDAO.getInstancia().altaSeguro(s);	
	}

	public void modificarSeguro(DTO_Seguro seguro) {
		Entity_Seguro s = new Entity_Seguro();
		Entity_Proveedor p = ProveedorDAO.getInstancia().getProveedor(seguro.getIdProveedor());
		s.setId(seguro.getId());
		s.setDescripcion(seguro.getDescripcion());
		s.setTipoSeguro(seguro.getTipoSeguro());
		s.setTarifa(seguro.getTarifa());
		s.setProveedor(p);
		
		ProveedorDAO.getInstancia().modificarSeguro(s);	
		
	}

	public void bajaSeguro(Integer idSeguro) {
		Entity_Seguro s = ProveedorDAO.getInstancia().getSeguro(idSeguro);
		if (s != null){
			ProveedorDAO.getInstancia().bajaSeguro(s);
		}
	}
	
	public DTO_Seguro buscarSeguro(Integer idSeguro) {
		return ProveedorDAO.getInstancia().getSeguro(idSeguro).toDTO();
	}

	public void altaPrecioCarrierNacional(DTO_PrecioCarrier precioCarrier){
		Entity_Proveedor proveedor = ProveedorDAO.getInstancia().getProveedor(precioCarrier.getIdProveedor());
		Entity_Destino destino = AdministracionDAO.getInstancia().getDestinoNacional(precioCarrier.getIdDestino());
		Entity_PrecioCarrier pc = new Entity_PrecioCarrier();
		pc.setTarifa(precioCarrier.getTarifa());
		pc.setPrecioKMExtra(precioCarrier.getPrecioKMExtra());
		pc.setPrioridad(precioCarrier.getPrioridad());
		pc.setComentarios(precioCarrier.getComentarios());
		pc.setDestino(destino);
		pc.setProveedor(proveedor);
		ProveedorDAO.getInstancia().altaPrecioCarrier(pc);	
	}

	public void modificarPrecioCarrierNacional(DTO_PrecioCarrier precioCarrier){
		Entity_Proveedor proveedor = ProveedorDAO.getInstancia().getProveedor(precioCarrier.getIdProveedor());
		Entity_Destino destino = AdministracionDAO.getInstancia().getDestinoNacional(precioCarrier.getIdDestino());
		Entity_PrecioCarrier pc = new Entity_PrecioCarrier();
		pc.setId(precioCarrier.getId());
		pc.setTarifa(precioCarrier.getTarifa());
		pc.setPrecioKMExtra(precioCarrier.getPrecioKMExtra());
		pc.setPrioridad(precioCarrier.getPrioridad());
		pc.setComentarios(precioCarrier.getComentarios());
		pc.setDestino(destino);
		pc.setProveedor(proveedor);
		ProveedorDAO.getInstancia().modificarPrecioCarrier(pc);	
	}

	public void bajaPrecioCarrierNacional(Integer idPrecioCarrier){
		Entity_PrecioCarrier p = ProveedorDAO.getInstancia().getPrecioCarrier(idPrecioCarrier);
		if (p != null){
			ProveedorDAO.getInstancia().bajaPrecioCarrier(p);
		}
	}
	
	public DTO_PrecioCarrier buscarPrecioCarrierNacional(Integer idPrecioCarrier) {
		return ProveedorDAO.getInstancia().getPrecioCarrier(idPrecioCarrier).toDTO();
	}

	public void altaPrecioCarrierInternacional(DTO_PrecioCarrier precioCarrier){
		Entity_Proveedor proveedor = ProveedorDAO.getInstancia().getProveedor(precioCarrier.getIdProveedor());
		Entity_Destino destino = AdministracionDAO.getInstancia().getDestinoInternacional(precioCarrier.getIdDestino());
		Entity_PrecioCarrier pc = new Entity_PrecioCarrier();
		pc.setTarifa(precioCarrier.getTarifa());
		pc.setPrecioKMExtra(precioCarrier.getPrecioKMExtra());
		pc.setPrioridad(precioCarrier.getPrioridad());
		pc.setComentarios(precioCarrier.getComentarios());
		pc.setDestino(destino);
		pc.setProveedor(proveedor);
		ProveedorDAO.getInstancia().altaPrecioCarrier(pc);	
	}

	public void modificarPrecioCarrierInternacional(DTO_PrecioCarrier precioCarrier) {
		Entity_Proveedor proveedor = ProveedorDAO.getInstancia().getProveedor(precioCarrier.getIdProveedor());
		Entity_Destino destino = AdministracionDAO.getInstancia().getDestinoInternacional(precioCarrier.getIdDestino());
		Entity_PrecioCarrier pc = new Entity_PrecioCarrier();
		pc.setId(precioCarrier.getId());
		pc.setTarifa(precioCarrier.getTarifa());
		pc.setPrecioKMExtra(precioCarrier.getPrecioKMExtra());
		pc.setPrioridad(precioCarrier.getPrioridad());
		pc.setComentarios(precioCarrier.getComentarios());
		pc.setDestino(destino);
		pc.setProveedor(proveedor);
		ProveedorDAO.getInstancia().modificarPrecioCarrier(pc);	
	}

	public void bajaPrecioCarrierInternacional(Integer idPrecioCarrier){
		Entity_PrecioCarrier p = ProveedorDAO.getInstancia().getPrecioCarrier(idPrecioCarrier);
		if (p != null){
			ProveedorDAO.getInstancia().bajaPrecioCarrier(p);
		}
	}

	public DTO_PrecioCarrier buscarPrecioCarrierInternacional(Integer idPrecioCarrier) {
		return ProveedorDAO.getInstancia().getPrecioCarrier(idPrecioCarrier).toDTO();
	}
	
	public List<DTO_Proveedor> listarProveedores() {
		List<Entity_Proveedor> lista =	ProveedorDAO.getInstancia().listarProveedores();
		if(lista != null){
			List<DTO_Proveedor>  listaDTO = new ArrayList<DTO_Proveedor>();
			for(Entity_Proveedor p : lista)
				listaDTO.add(p.toDTO());
			return listaDTO;
		}
		return null;
	}

	public List<DTO_Proveedor> listarTalleres() {
		List<Entity_Proveedor> lista =	ProveedorDAO.getInstancia().listarTalleres();
		if(lista != null){
			List<DTO_Proveedor>  listaDTO = new ArrayList<DTO_Proveedor>();
			for(Entity_Proveedor p : lista)
				listaDTO.add(p.toDTO());
			return listaDTO;
		}
		return null;
	}


	public List<DTO_Proveedor> listarAseguradoras() {
		List<Entity_Proveedor> lista =	ProveedorDAO.getInstancia().listarAseguradoras();
		if(lista != null){
			List<DTO_Proveedor>  listaDTO = new ArrayList<DTO_Proveedor>();
			for(Entity_Proveedor p : lista)
				listaDTO.add(p.toDTO());
			return listaDTO;
		}
		return null;
	}

	public List<DTO_Proveedor> listarEmpresasSeguridad() {
		List<Entity_Proveedor> lista =	ProveedorDAO.getInstancia().listarEmpresasSeguridad();
		if(lista != null){
			List<DTO_Proveedor>  listaDTO = new ArrayList<DTO_Proveedor>();
			for(Entity_Proveedor p : lista)
				listaDTO.add(p.toDTO());
			return listaDTO;
		}
		return null;
	}

	public List<DTO_Proveedor> listarCarriers() {
		List<Entity_Proveedor> lista =	ProveedorDAO.getInstancia().listarCarriers();
		if(lista != null){
			List<DTO_Proveedor>  listaDTO = new ArrayList<DTO_Proveedor>();
			for(Entity_Proveedor p : lista)
				listaDTO.add(p.toDTO());
			return listaDTO;
		}
		return null;
	}

	public List<DTO_FacturaProveedor> listarFacturasProveedorPendientes() {
		List<Entity_FacturaProveedor> lista =	ProveedorDAO.getInstancia().listarFacturasProveedorPendientes();
		if(lista != null){
			List<DTO_FacturaProveedor>  listaDTO = new ArrayList<DTO_FacturaProveedor>();
			for(Entity_FacturaProveedor f : lista)
				listaDTO.add(f.toDTO());
			return listaDTO;
		}
		return null;
	}


	public List<DTO_FacturaProveedor> listarFacturasProveedor(Integer idProveedor) {
		List<Entity_FacturaProveedor> lista =	ProveedorDAO.getInstancia().listarFacturasProveedor(idProveedor);
		if(lista != null){
			List<DTO_FacturaProveedor>  listaDTO = new ArrayList<DTO_FacturaProveedor>();
			for(Entity_FacturaProveedor f : lista)
				listaDTO.add(f.toDTO());
			return listaDTO;
		}
		return null;
	}

	public List<DTO_FacturaProveedor> listarFacturasProveedorPendientes(Integer idProveedor) {
		List<Entity_FacturaProveedor> lista =	ProveedorDAO.getInstancia().listarFacturasProveedorPendientes(idProveedor);
		if(lista != null){
			List<DTO_FacturaProveedor>  listaDTO = new ArrayList<DTO_FacturaProveedor>();
			for(Entity_FacturaProveedor f : lista)
				listaDTO.add(f.toDTO());
			return listaDTO;
		}
		return null;
	}

	public List<DTO_ServicioSeguridad> listarServicioSeguridad(Integer idProveedor) {
		List<Entity_ServicioSeguridad> lista =	ProveedorDAO.getInstancia().listarServicioSeguridad(idProveedor);
		if(lista != null){
			List<DTO_ServicioSeguridad>  listaDTO = new ArrayList<DTO_ServicioSeguridad>();
			for(Entity_ServicioSeguridad s : lista)
				listaDTO.add(s.toDTO());
			return listaDTO;
		}
		return null;
	}

	public List<DTO_Seguro> listarSeguros(Integer idProveedor) {
		List<Entity_Seguro> lista =	ProveedorDAO.getInstancia().listarSeguros(idProveedor);
		if(lista != null){
			List<DTO_Seguro>  listaDTO = new ArrayList<DTO_Seguro>();
			for(Entity_Seguro s : lista)
				listaDTO.add(s.toDTO());
			return listaDTO;
		}
		return null;
	}

	public List<DTO_PrecioCarrier> listarPrecioCarrier(Integer idProveedor) {
		List<Entity_PrecioCarrier> lista =	ProveedorDAO.getInstancia().listarPrecioCarrier(idProveedor);
		if(lista != null){
			List<DTO_PrecioCarrier>  listaDTO = new ArrayList<DTO_PrecioCarrier>();
			for(Entity_PrecioCarrier pc : lista)
				listaDTO.add(pc.toDTO());
			return listaDTO;
		}
		return null;
	}

	public List<DTO_PrecioCarrier> listarPrecioCarrierDestino(Integer idDestino) {
		List<Entity_PrecioCarrier> lista =	ProveedorDAO.getInstancia().listarPrecioCarrierDestino(idDestino);
		if(lista != null){
			List<DTO_PrecioCarrier>  listaDTO = new ArrayList<DTO_PrecioCarrier>();
			for(Entity_PrecioCarrier pc : lista)
				listaDTO.add(pc.toDTO());
			return listaDTO;
		}
		return null;
	}

}
